package com.studyweb.mapper;

import com.studyweb.pojo.entity.Achievement;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 成就Mapper接口
 * 
 * @author StudyWeb Team
 * @since 1.0.0
 */
@Mapper
public interface AchievementMapper {
    
    /**
     * 根据ID查询成就
     * 
     * @param achievementId 成就ID
     * @return 成就信息
     */
    Achievement selectById(@Param("achievementId") Long achievementId);
    
    /**
     * 查询所有成就
     * 
     * @return 成就列表
     */
    List<Achievement> selectAll();
    
    /**
     * 根据类别查询成就
     * 
     * @param category 成就类别
     * @return 成就列表
     */
    List<Achievement> selectByCategory(@Param("category") String category);
    
    /**
     * 根据条件类型查询成就
     * 
     * @param conditionType 条件类型
     * @return 成就列表
     */
    List<Achievement> selectByConditionType(@Param("conditionType") String conditionType);
    
    /**
     * 根据条件类型和条件值查询成就
     * 
     * @param conditionType 条件类型
     * @param conditionValue 条件值
     * @return 成就列表
     */
    List<Achievement> selectByCondition(@Param("conditionType") String conditionType, @Param("conditionValue") Integer conditionValue);
    
    /**
     * 根据条件类型和最大条件值查询成就
     * 
     * @param conditionType 条件类型
     * @param maxValue 最大条件值
     * @return 成就列表
     */
    List<Achievement> selectByConditionLessThanOrEqual(@Param("conditionType") String conditionType, @Param("maxValue") Integer maxValue);
    
    /**
     * 插入成就
     * 
     * @param achievement 成就信息
     * @return 影响行数
     */
    int insert(Achievement achievement);
    
    /**
     * 更新成就
     * 
     * @param achievement 成就信息
     * @return 影响行数
     */
    int update(Achievement achievement);
    
    /**
     * 删除成就
     * 
     * @param achievementId 成就ID
     * @return 影响行数
     */
    int deleteById(@Param("achievementId") Long achievementId);
    
    /**
     * 根据名称模糊查询成就
     * 
     * @param name 成就名称
     * @return 成就列表
     */
    List<Achievement> selectByName(@Param("name") String name);
    
    /**
     * 分页查询成就
     * 
     * @param offset 偏移量
     * @param size 每页大小
     * @param name 成就名称（可选）
     * @param category 成就类别（可选）
     * @return 成就列表
     */
    List<Achievement> selectByPage(@Param("offset") int offset, @Param("size") int size, 
                                  @Param("name") String name, @Param("category") String category);
    
    /**
     * 查询成就总数
     * 
     * @param name 成就名称（可选）
     * @param category 成就类别（可选）
     * @return 成就总数
     */
    int count(@Param("name") String name, @Param("category") String category);
}